import vnode from './vnode.js'
// 编写低配版的h函数：必须传递3个参数：相当于重载功能
/**
 * 形态1：h('div',{},'文字')
 * 形态2：h('div',{},[])
 * 形态3：h('div',{},h())
 */
export default function(sel,data,c){
    // 检查参数的个数
    if (arguments.length!==3) {
        throw new  Error('对不起，h函数需传3个参数')
    }
    // 检查c的类型
    if(typeof c=='string'|| typeof c=='number'){
        // 说明现在调用h函数的形态1
        return vnode(sel,data,undefined,c,undefined)
    }else if(Array.isArray(c)){
        // 说明是形态2
        // 1.遍历c 2.定义chidlren[]进行收集
        let children=[]
        c.forEach(element => {
         if(!(typeof element ==='object' && element.hasOwnProperty('sel'))){
            throw new  Error('对不起，传入的参数有项不是h函数')
         }
         children.push(element) //收集children
        });
        return vnode(sel,data,children,undefined,undefined)
    }else if(typeof c==='object' && c.hasOwnProperty('sel')){
        // 说明位形态3:即传入的c就是唯一的children
        let children=[c]
        return vnode(sel,data,children,undefined,undefined)
    }else{
        throw new  Error('对不起，传入的参数类型不对')
    }

    

}